import java.io.*;

public class IoCode1117 {
    public static void main(String[] args) throws IOException {
//        String str = "ai你哟";
//        byte[] b = str.getBytes();
//        System.out.println(Arrays.toString(b));

//        byte[] b1 = str.getBytes("GBK");
//        System.out.println(Arrays.toString(b1));

//        String str2=new String(b);
//        System.out.println(str2);

/**
 *         读取数据时未读完整个汉字
 *         乱码的原因就是因为编码方式 和 解码方式不一致
 * */

//        指定方式解码
//        String str3=new String(b1,"GBK");
//        System.out.println(str3);

        /*
         *  乱码的解决方式
         *  字符流
         *  FileReader 输入流
         *  FileWriter 输出流
         *
         * 返回格式：
         *  1. 字符流 read() 一次读取一个字符
         *  2. 字符流 read(char[]) 一次读取多个字符
         *
         *  解码为十进制并进行返回
         *
         * */

//        FileReader fos = new FileReader("IoCode\\javaFile\\a.txt");
//        int ch;
//        while ((ch = fos.read()) != -1) {
//            System.out.print ((char) ch);
//        }
//        fos.close();

//        char[] chs = new char[2];
//        int len;
//        while ((len = fos.read(chs)) != -1) {
//            System.out.print(new String(chs, 0, len));
//        }
//        fos.close();、


//        字节缓存流
//        //        字节缓存流 输入流
//        BufferedInputStream br = new BufferedInputStream(new FileInputStream("IoCode\\javaFile\\a.txt"));
//        //        字节缓存流 输出流
//        BufferedOutputStream bw = new BufferedOutputStream(new FileOutputStream("IoCode\\javaFile\\b.txt"));
//        //        字节缓存流 读取数据
//        int ch;
//        while ((ch = br.read()) != -1) {
//            bw.write(ch);
//        }
//        br.close();
//        bw.close();



////        字符缓存流
//        //        字符缓存流 输入流
//        BufferedReader br2 = new BufferedReader(new FileReader("IoCode\\javaFile\\a.txt"));
//
//        //        字符缓存流 输出流
//        BufferedWriter bw2 = new BufferedWriter(new FileWriter("IoCode\\javaFile\\b.txt"));
//        //        字符缓存流 读取数据
//        String line;
////        readLine() 一次读取一行数据 读到换行符时返回 但是不会吧换行符读到内存中
//        while ((line = br2.readLine()) != null) {
//            bw2.write(line);
//            bw2.newLine();
//        }
//        br2.close();
//        bw2.close();

        /*
        * 缓存流有四种
        * 字节缓冲输入流 BufferedInputStream
        * 字节缓冲输出流 BufferedOutputStream
        * 字符缓冲输入流 BufferedReader
        * 字符缓冲输出流 BufferedWriter
        * readLine() 一次读取一行数据 读到换行符时返回 但是不会吧换行符读到内存中
        * newLine() 一次写入一行数据 会自动在数据末尾添加换行符
        * */

        /*
        * 转换流
        * 转换流 可以将字节流转换为字符流
        * 转换流 输入流 InputStreamReader jdk11被淘汰了 替代方案是 FileReader
        * 转换流 输出流 OutputStreamWriter jdk11被淘汰了 替代方案是 FileWriter
        * */

        /*
        * 序列化流 ObjectOutputStream
        * 反序列化流 ObjectInputStream
        * 1.用序列化流将对象写到文件中的时候 需要对象javaBeen实现 Serializable 接口 否则会出现 NotSerializableException 异常
        * 2.列化流写到本地文件中的数据是不能修改的 不然反序列化后 会出现 InvalidClassException 异常
        * 3.序列化对象后 再修改javaBeen类 会导致反序列化时 出现 InvalidClassException 异常 （原因是版本号不一致） 需要给javaBeen类添加 serialVersionUID 字段
        * 4.某一个成员不想被序列化 可以在该成员前添加 transient 关键字（瞬态关键字）
        * */

        /*
        * 打印流分为字节打印流和字符打印流
        * 字节打印流 可以将数据直接打印到文件中
        * 字节打印流 输出流 PrintStream jdk11被淘汰了 替代方案是 FileOutputStream
        * 字符打印流 可以将数据直接打印到文件中
        * 字符打印流 输出流 PrintWriter jdk11被淘汰了 替代方案是 FileWriter
        * */
//        PrintWriter out = new PrintWriter(new FileWriter("IoCode\\javaFile\\output.txt",true));
//        out.println("hello world");
//        out.println("我是张城勇 大帅哥");
//        out.flush();
//        out.close();
//        System.out.close();
//        System.out.println("打印流 打印数据到文件中");

        /*
        * 解压缩流和压缩流
        * 压缩流 输出流 DeflaterOutputStream
        * 解压缩流 输入流 InflaterInputStream
        * */




    }

}
